"""
    用于任务管理模块的任务查看功能，搜索任务功能，还用于控制任务左侧目录，切换任务管理，用户管理（标注团队，运营人员）
"""

import time

from selenium.webdriver import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from automatic import page
from automatic.base.base import Base
from automatic.base.get_logger import GetLogger
from selenium.webdriver.support import expected_conditions as EC


# 获取log日志器
log = GetLogger().get_logger()

class PageTaskList(Base):
    #点击查看按钮
    def page_click_check_button(self,row_number):
        #动态构造查看选项的定位器
        row_locator=(page.task_list_check_button[0],page.task_list_check_button[1].format(row_number))
        log.info("[page_task_list]:正在对{}元素进行点击操作".format(row_locator))
        self.base_click(row_locator)

    #填写任务名称
    def page_input_task_name(self,task_name):
        log.info("[page_task_list]:正在对{}元素输入信息：{}".format(page.task_name_input,task_name))
        self.base_input(page.task_name_input,task_name)

    #点击状态框
    def page_click_task_status_check(self):
        log.info("[page_task_list]:正在对{}元素进行点击操作".format(page.task_status_check))
        self.base_click(page.task_status_check)

    #选择状态
    def page_click_task_status(self,check_status):
        status=(page.task_status[0],page.task_status[1].format(check_status))
        log.info("[page_task_list]:正在对{}元素进行点击操作".format(status))
        self.base_click(status)

    #点击创建人框
    def page_click_task_creator_id(self):
        log.info("[page_task_list]:正在对{}元素进行点击操作".format(page.task_creator_id))
        self.base_click(page.task_creator_id)

    #点击选择框中的滑块
    def page_click_slider(self):
        log.info("[page_task_list]:正在对{}元素进行点击操作".format(page.slider))
        # 步骤 1：定位滚动条轨道和滑块（根据实际结构调整选择器）
        scrollbar_track = WebDriverWait(self.driver, 10).until(
            EC.presence_of_element_located(page.scrollbar_track)  # 滚动条轨道（外层容器）
        )
        slider = WebDriverWait(self.driver, 10).until(
            EC.element_to_be_clickable(page.slider)  # 滑块（内层可拖动部分）
        )

        # 步骤 2：计算滑块可移动的最大范围（轨道高度 - 滑块高度）
        track_height = scrollbar_track.size["height"]  # 轨道总高度
        slider_height = slider.size["height"]          # 滑块自身高度
        max_drag_distance = track_height - slider_height  # 滑块可向下拖动的最大距离

        # 步骤 3：模拟拖拽滑块（按下滑块 → 移动 → 释放）
        actions = ActionChains(self.driver)
        actions.click_and_hold(slider).perform()  # 按下滑块

        # 分步参数：将总距离拆分为10小步（可根据需要调整步数，如20步更慢）
        step_num = 10
        step_delay = 0.1  # 每步停顿时间（秒），可调整

        for i in range(step_num):
            # 计算当前步的偏移量（总距离均分）
            current_offset = int(max_drag_distance * (i + 1) / step_num)
            # 移动当前步的偏移量（垂直方向）
            actions.move_by_offset(0, current_offset).perform()
            # 每步结束后短暂停顿，模拟人类操作
            time.sleep(step_delay)

        actions.release().perform()  # 释放滑块

    #选择创建人
    def page_click_task_creator_name(self,creator_name):
        title_name=page.task_creator_name[0],page.task_creator_name[1].format(creator_name)
        log.info("[page_task_list]:正在对{}元素进行点击操作".format(title_name))
        self.base_click(title_name)

    #点击任务搜索按钮
    def page_click_task_search_button(self):
        log.info("[page_task_list]:正在对{}元素进行点击操作".format(page.task_search_button))
        self.base_click(page.task_search_button)

    #悬停更多工具
    def page_move_to_more_tools(self):
        log.info("[page_task_list]:正在对{}元素进行悬停操作".format(page.more_tools))
        self.base_move_to_element(page.more_tools)

    #点击下一页
    def page_click_page_next(self):
        log.info("[page_task_list]:正在对{}元素进行点击操作".format(page.task_page_next))
        self.base_click(page.task_page_next)

    #点击上一页
    def page_click_page_prev(self):
        log.info("[page_task_list]:正在对{}元素进行点击操作".format(page.task_page_prev))
        self.base_click(page.task_page_prev)











